#include "timer.h"
#include "gpio.h"
#include "../VIC/vic_reg.h"
#include "../PRINT/my_printf.h"
#include <rtthread.h>

extern void SysTick_Handler(void);

// void timer0_init(){
//     IP_RESET_REGISTER1 |= (1 << 4);     // 关闭复位

//     TCFG0 |= (250 - 1);     // PCLK = 200MHz 200000000 / 16 / 250 = 50000;
//     TCFG1 |= 0x4;
//     TCNTB0 = 500;          // 10ms
//     TCON |= (1 << 1);

//     vic_init(23, (u32)timer0_ISR);  // 注册VIC
//     // vic_init(23, (u32)SysTick_Handler);  // 注册VIC

//     TINT_CSTAT |= (1 << 0); // 中断使能
//     TCON &= ~(1 << 1);
//     TCON |= ((1 << 3) | (1 << 0));  // 自动重装载，启动定时器
// }

void SysTick_Config(){
    IP_RESET_REGISTER1 |= (1 << 4);     // 关闭复位

    TCFG0 |= (250 - 1);     // PCLK = 200MHz 200000000 / 16 / 250 = 50000;
    TCFG1 |= 0x4;
    TCNTB0 = 500;          // 500 = 10ms
    TCON |= (1 << 1);

    // vic_init(23, (u32)timer0_ISR);  // 注册VIC
    vic_init(23, (u32)SysTick_Handler);  // 注册VIC

    TINT_CSTAT |= (1 << 0); // 中断使能
    TCON &= ~(1 << 1);
    TCON |= ((1 << 3) | (1 << 0));  // 自动重装载，启动定时器
}

void timer2_init(){
    IP_RESET_REGISTER1 |= (1 << 4);

    TCFG0 |= ((250 - 1) << 8);     // PCLK = 200MHz 200000000 / 16 / 250 = 50000;
    TCFG1 |= (4 << 8);
    TCNTB2 = 25000;          // 0.5s
    TCON |= (1 << 13);

    vic_init(25, (u32)timer2_ISR);

    TINT_CSTAT |= (1 << 2); // 中断使能
    TCON &= ~(1 << 13);
    TCON |= ((1 << 15) | (1 << 12));  // 自动重装载，启动定时器
}


void timer0_ISR(){
    printf("timer_ISR %x\r\n", 0);
    TINT_CSTAT |= (1 << 5);      // 清除中断标志
    // VICADDRESS_CH0 = 0x0;
}

void timer2_ISR(){
    printf("timer_ISR %x\r\n", 2);
    TINT_CSTAT |= (1 << 7);      // 清除中断标志
    // VICADDRESS_CH0 = 0x0;
}